/* Triggers y funciones para implementar la herencia de visibilidad rubro art - articulo y rubro pad - entidad
Hay dos parametros que de estar en la configuracion general hacen que los articulos o entidades
copien la visibilidad del rubro en los updates (cuando se cambia el rubro).
Hay excepciones, hay ayuda en Constantes de configuracion
*/


CREATE OR REPLACE FUNCTION public.tg_art_upd_visibilidad()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
  accesoUsuariosRubVie 		varchar;
  accesoSucursalesRubVie 	varchar;
  
BEGIN
 IF (SELECT position('ArticulosHeredaVisibilidad' in ini) FROM AMBCFG) > 0 THEN
    SELECT accesoUsuarios, accesoSucursales into accesoUsuariosRubVie, accesoSucursalesRubVie FROM ARTR WHERE COD = old.CodArtR and tipoarta = 'A';
	IF (old.accesoUsuarios = accesoUsuariosRubVie and old.accesoSucursales = accesoSucursalesRubVie) THEN
		SELECT accesoUsuarios, accesoSucursales into accesoUsuariosRubVie, accesoSucursalesRubVie FROM ARTR WHERE COD = new.CodArtR and tipoarta = 'A';
	   	new.accesoUsuarios := accesoUsuariosRubVie; -- ahora son nuevos...
		new.accesoSucursales := accesoSucursalesRubVie;
    END IF;
 END IF;
 RETURN NEW;
END;
$BODY$;

ALTER FUNCTION public.tg_art_upd_visibilidad()
    OWNER TO abacouser;

DROP TRIGGER IF EXISTS art_upd_visibilidad ON public.ART;

CREATE TRIGGER art_upd_visibilidad
    BEFORE UPDATE 
    ON public.art
    FOR EACH ROW
	WHEN (OLD.CODARTR <> NEW.CODARTR)
    EXECUTE PROCEDURE public.tg_art_upd_visibilidad();
	
	
CREATE OR REPLACE FUNCTION public.tg_pad_upd_visibilidad()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
  accesoUsuariosRubVie 		varchar;
  accesoSucursalesRubVie 	varchar;
  
BEGIN
 IF (SELECT position('EntidadesHeredaVisibilidad' in ini) FROM AMBCFG) > 0 THEN
    SELECT accesoUsuarios, accesoSucursales into accesoUsuariosRubVie, accesoSucursalesRubVie FROM PADR WHERE COD = old.CodPadR and tipopada = 'A';
	IF (old.accesoUsuarios = accesoUsuariosRubVie and old.accesoSucursales = accesoSucursalesRubVie) THEN
		SELECT accesoUsuarios, accesoSucursales into accesoUsuariosRubVie, accesoSucursalesRubVie FROM PADR WHERE COD = new.CodPadR and tipopada = 'A';
	   	new.accesoUsuarios := accesoUsuariosRubVie; -- ahora son nuevos...
		new.accesoSucursales := accesoSucursalesRubVie;
    END IF;
 END IF;
 RETURN NEW;
END;
$BODY$;

ALTER FUNCTION public.tg_pad_upd_visibilidad()
    OWNER TO abacouser;

DROP TRIGGER IF EXISTS pad_upd_visibilidad ON public.pad;

CREATE TRIGGER pad_upd_visibilidad
    BEFORE UPDATE 
    ON public.pad
    FOR EACH ROW
	WHEN (OLD.CODPADR <> NEW.CODPADR)
    EXECUTE PROCEDURE public.tg_pad_upd_visibilidad();	
	
/* --------------------------------------------------------------*/

SELECT aaVersion('488.01','488.00');

/* --------------------------------------------------------------*/

